#ifndef STOCKCARTETRANSACTION_h
#define STOCKCARTETRANSACTION_h

#include <stdlib.h>
#include <stdio.h>
#include "carte.h"

typedef struct
{
  unsigned int capacite;
  unsigned int taille_utilisee;
  CarteTransaction *ad;
} StockCarteTransaction;

/**
@brief InitialiserPTabDyn permet d'initialiser le tableau dynamique contenant les cartes que le joueur va pioché, il est initialisé a une alvéole vide
@param [in] t: pointeur sur StockCarte
@return none
*/
/* Precondition : t non prealablement initialise */
void InitialiserTabDynT(StockCarteTransaction* t);

/**
@brief testamentTabDyn permet de libérer la mémoire allouée dynamiquement
@param [in] t: pointeur sur StockCarte
@return none
*/
/* Precondition : t prealablement initialise */
void TestamentTabDynT(StockCarteTransaction *t);

/**
@brief tailleUtiliseeTabDyn nombre de Cartes stockes
@param  [in] t: pointeur sur StockCarte
@return entier
*/
int EstVideTabT(StockCarteTransaction *t);

/**
@brief ajouterElementTabDyn permet d'ajouter une carte au tableau est d'incrémenter la taille utilisée par 1 ainsi que de doubler la capacité si nécessaire
@param  [in] t: pointeur sur StockCarte,
@return none
*/
/* Precondition : t prealablement initialise */
void AjouterElementTabDynT(StockCarteTransaction *t, const CarteTransaction c);

/**
@brief supprimerElementTabDyn permet de supprimer une carte au tableau est de décrementer la taille utilisée par 1 ainsi si tailleUtilisee < capacite/3, alors on divise la capacité par 2.
@param  [in] t: pointeur sur StockCarte, [in, out] position: entier
@return none
*/
void SupprimerElementTabDynT( StockCarteTransaction*t, const int position );

/**
@brief valeurIemeElementTabDyn retourne la i+1eme Carte de t
@param  [in, out] t: pointeur sur StockCarte, [in] i: entier
@return Carte
*/
/* Precondition : t prealablement initialise, 0 <= i < tailleUtilisee(t) */
CarteTransaction ValeurIemeElementTabDynT(const StockCarteTransaction *t, unsigned int i);


#endif
